import { useStore } from "../store";
import { router } from "../router";
import { isDev, config } from "../../config";

// 请求队列
let requests: any[] = [];

// Token 是否刷新中
let isRefreshing = false;

export default function request(options: any) {
	// 缓存信息
	const { user } = useStore();

	// 标识
	let login_token = user.token || "";
	// 忽略标识
	config.ignore.token.forEach((e) => {
		if (options.url.includes(e)) {
			login_token = "";
		}
	});

	if (isDev) {
		console.log(`[${options.method || "GET"}] ${options.url}`);
	}

	// 请求插入公共数据 -- 备用
	// if (!options.noInsert) {
	// 	// if (!Authorization) {
	// 	// 	user.logout();
	// 	// 	return false
	// 	// }

	// 	options.data = options.data ? options.data : {}
	// 	options.data.erpCode = user.info?.loginRole?.erpCode || ''
	// 	options.data.userType = user.info?.loginRole?.userType || ''
	// }

	console.info("login_token", login_token)

	return new Promise(async (resolve, reject) => {
		// 继续请求
		function next() {
			uni.request({
				...options,

				header: {
					Accept: "*/*",
					"Content-Type": "application/json",
					// "Content-Type": "application/x-www-form-urlencoded",
					"login_token": login_token,
					...options.header,
				},

				success(res: any) {
					const { statusCode, data, errMsg: message } = res;

					// 无权限
					if (statusCode === 401 || (message == '用户未登录' || message == 'erpCode 为空')) {
						if (router.info()?.path == router.pages.login) {
							return reject({ message });
						} else {
							user.logout();
						}
					}

					// 服务异常
					if (statusCode === 502) {
						return reject({
							message: "服务异常",
						});
					}

					// 未找到
					if (statusCode === 404) {
						return reject({
							message: `[404] ${options.url}`,
						});
					}

					// 成功
					if (statusCode === 200) {
						resolve(data);

						// if (success === true) {
						// 	resolve(data);
						// } else {
						// 	if (message && options.toast !== false) {
						// 		uni.showToast({
						// 			title: message,
						// 			icon: 'none'
						// 		});
						// 	}
						// 	reject(res.data);
						// }
					}
				},

				fail(err) {
					reject({ message: err.errMsg });
				},
			});
		}

		// 刷新token处理
		// if (!options.url.includes("refreshToken")) {
		// 	if (Authorization) {
		// 		// 判断 token 是否过期
		// 		if (storage.isExpired("token")) {
		// 			// 判断 refreshToken 是否过期
		// 			if (storage.isExpired("refreshToken")) {
		// 				// 退出登录
		// 				return user.logout();
		// 			}

		// 			// 是否在刷新中
		// 			if (!isRefreshing) {
		// 				isRefreshing = true;
		// 				user.refreshToken().then((token) => {
		// 					requests.forEach((cb) => cb(token));
		// 					requests = [];
		// 					isRefreshing = false;
		// 				});
		// 			}

		// 			return new Promise((resolve) => {
		// 				// 继续请求
		// 				requests.push((token: string) => {
		// 					// 重新设置 token
		// 					Authorization = token;
		// 					next();
		// 					resolve();
		// 				});
		// 			});
		// 		}
		// 	}
		// }

		next();
	});
}
